package com.lgit.model2.hw01;

/*
  作  者：贾鹏举
  日  期：2020年7月16号
  备  注：模块2作业1
 */

import java.util.Scanner;

public class Model02Hw01 {

    public static void main(String[] args) {

        // 1.定义一个16行16列的二维数组
        int[][] arr = new int[16][16];
        // 2.往二维数组中输入元素
        // 调用Scanner方法并提示用户输入元素
        // Scanner sc = new Scanner(System.in);
        // System.out.println("请依次输入二维数组中的元素:");
        // 3.双重for循环完成元素的输入
        for (int i = 0; i < 16; i++) {
            for (int j = 0; j < 16; j++) {
                // 键盘输入
                // arr[i][j] = sc.nextInt();
                // 为了提高效率，这里用的用i + j的值进行模拟输入
                arr[i][j] = i + j;
            }
        }
        // 4.双重for循环遍历输入的二维数组查看效果
        for (int i = 0; i < 16; i++) {
            for (int j = 0; j < 16; j++) {
                System.out.print(arr[i][j] + "\t");
            }
            System.out.println();
        }
        // 5.实现二维数组中左上角到右下角的累加和
        /*
        * 解题思路:
        * 1.左上角的元素下标为arr[0][0],右下角的元素下标为arr[15][15]
        * 2.这是一个16*16的二维数组，因此左上到右下刚好是一个对角线
        * 3.在这条对角线上，满足 行数 == 列数 的条件，因此可以在for循环中做一个判断
        * 4.判断条件是:每当 (行数 == 列数) 的时候，定义一个变量去接收此时元素的累加值
        * 5.进而得到arr[0][0] + arr[1][1] + ... + arr[14][14] + arr[15][15]的值
        * 6.打印输出
        * */
        int zsyx = 0; // 定义左上角加到右下角的和
        for (int i = 0; i < 16; i++) {
            for (int j = 0; j < 16; j++) {
                if (i == j) {
                    zsyx += arr[i][j];
                }
            }
        }
        // 5.1 打印左上角到右下角元素的累加和
        System.out.println("该二维数组左上角到右下角元素的累加和为:" + zsyx);

        System.out.println("*华------丽------的------分------割------线*");

        // 6.实现二维数组中右上角到左下角的累加和
        /*
         * 解题思路:
         * 1.右上角的元素下标为arr[0][15],左下角的元素下标为arr[15][0]
         * 2.这是一个16*16的二维数组，因此右上到左下刚好是一个对角线
         * 3.在这条对角线上，元素从右上角往左下角靠，对应行数的+1，对应列数的值-1
         * 4.判断条件是:每当 (15 == 行数值+列数值) 的时候，定义一个变量去接收此时元素的累加值
         * 5.进而得到arr[0][15] + arr[1][14] + ... + arr[14][1] + arr[15][0]的值
         * 6.打印输出
         * */
        int yxzs = 0; // 定义右上角加到左下角的和
        for (int i = 0; i < 16; i++) {
            for (int j = 15; j >= 0; j--) {
                if (15 == i+j) {
                    yxzs += arr[i][j];
                }
            }
        }
        // 6.1 打印右下角到左上角元素的累加和
        System.out.println("该二维数组右上角到左下角元素的累加和为:" + yxzs);

        System.out.println("*华------丽------的------分------割------线*");

        // 7.实现所有元素的累加和
        int sum = 0;
        for (int i = 0; i < 16; i++) {
            for (int j = 0; j < 16; j++) {
                sum += arr[i][j];
            }
        }
        System.out.println("该二维数组所有元素的累加和为:" + sum);
    }
}
